package com.study.spark.scala.chapter06

import com.study.spark.scala.test.ScalaUser

object Scala08_Object_Instance_5 {
  def main(args: Array[String]): Unit = {
    // TODO Scala中伴生对象就是 单例
    // 伴生对象只需要声明即可，不需要构建，所有不需要构造参数列表
    // 单列模式存在一个问题：创建的对象不会被回收，需要显示回收（设置为null）

    // 如果伴生对象中构建对象的方法名称为apply，编译器可以自动识别，方法名可以省略
//    val test1 = Test.apply()
//    val test2 = Test()
//    println(test1)
//    println(test2)

    val t1 = new Test()//调用类的构造方法
    val t2 = Test()// 调用伴生对象的apply方法
    val t3 = Test //伴生对象主体
/*
类的构造方法
类的构造方法
apply
 */


  }
  class Test /*private*/ (){
    println("类的构造方法")
  }

  object Test{
    def getInstance(): Unit ={
      new Test()
    }

    def apply(): Unit = {
      new Test()
      println("apply")
    }
  }
}


